/*
 * Universidad del Valle de Guatemala
 * Algoritmos y Estructura de Datos
 * David Hsieh #08225
 */

public class ListaOrdenada<E>  {
    private int limite;
    private Nodo[] elementos;
    private int cantidad;

    public ListaOrdenada(int limite) {
        this.limite = limite;
        elementos =  new Nodo[limite];
        cantidad = 0;
    }

    public void insertar(Nodo item) {
        int j;

        if(cantidad == 0)
            elementos[cantidad++] = item;
        else {
            for(j=cantidad -1; j>=0; j--) {
                if(item.getFrecuencia() >= elementos[j].getFrecuencia())
                    elementos[j+1] = elementos[j];
                else
                    break;

            }

            elementos[j+1] = item;
            cantidad ++;
        }


    }

    public Nodo retirar() {
        cantidad --;
        return elementos[cantidad];
    }


    public Nodo retirar(Nodo nodo) {
        Nodo temp;
        for(int i =0; i < cantidad; i++) {
            if(elementos[i].getDato().toString().charAt(0) == nodo.getDato().toString().charAt(0)) {
                temp = elementos[i];
                elementos[i] = null;
                for(int j = i+1; j < cantidad; j++)
                    elementos[i] = elementos[j];
                cantidad --;
                return temp;
            } 
               

        }
  
        return null;
    }



    public Nodo verPrimero() {

        return elementos[cantidad-1];

    }

    public boolean vacio() {
        return (cantidad==0);
    }

    public boolean lleno() {
        return (cantidad == limite);
    }

    public int getCantidad() {
        return cantidad;
    }

    public Nodo getNodo(Nodo nodo) {
        for(int i =0; i < cantidad; i++) {
            if(elementos[i].getDato().toString().charAt(0) == nodo.getDato().toString().charAt(0)) {
                return elementos[i];
            }
        }
        return null;
    }

}
